from tools.search import searchByBaidu
from tools.ToolExecutor import ToolExecutor
import unittest
# --- 工具初始化与使用示例 ---

class TestAgent(unittest.TestCase):
    def test_tool_executor(self):
        # 1. 初始化工具执行器
        toolExecutor = ToolExecutor()

        # 2. 注册我们的实战搜索工具
        search_description = "一个网页搜索引擎。当你需要回答关于时事、事实以及在你的知识库中找不到的信息时，应使用此工具。"
        toolExecutor.registerTool("Search", search_description, searchByBaidu)

        # 3. 打印可用的工具
        print("\n--- 可用的工具 ---")
        print(toolExecutor.getAvailableTools())

        # 4. 智能体的Action调用，这次我们问一个实时性的问题
        print("\n--- 执行 Action: Search['英伟达最新的GPU型号是什么'] ---")
        tool_name = "Search"
        tool_input = "英伟达最新的GPU型号是什么"

        tool_function = toolExecutor.getTool(tool_name)
        if tool_function:
            observation = tool_function(tool_input)
            print("--- 观察 (Observation) ---")
            print(observation)
            # self.assertIsNotNone(observation, "搜索结果为空")
        else:
            # print(f"错误：未找到名为 '{tool_name}' 的工具。")
            self.fail(f"未找到名为 '{tool_name}' 的工具")

    def test_search_by_baidu(self):
        query = "英伟达最新的GPU型号是什么"
        results = searchByBaidu(query)
        # print(results)
        for item in results:
            print(item['title'])
        # self.assertIsNotNone(results, "搜索结果为空")
        # self.assertIn(query, results, f"搜索结果中未包含查询关键词 '{query}'")

    def test_agent_use_tool(self):
        toolExecutor = ToolExecutor()
        search_description = "一个网页搜索引擎。当你需要回答关于时事、事实以及在你的知识库中找不到的信息时，应使用此工具。"
        toolExecutor.registerTool("Search", search_description, searchByBaidu)
        tool_name = "Search"
        tool_input = "英伟达最新的GPU型号是什么"
        tool_function = toolExecutor.getTool(tool_name)
        if tool_function:
            observation = tool_function(tool_input)
            print("--- 观察 (Observation) ---")
            print(observation)
            # self.assertIsNotNone(observation, "搜索结果为空")
        else:
            # print(f"错误：未找到名为 '{tool_name}' 的工具。")
            self.fail(f"未找到名为 '{tool_name}' 的工具")


if __name__ == '__main__':
    unittest.main()
